ফাইল বা স্ট্রিমে Data Serialization

Java Technologies - অ্যাপাচি কমন্স আইও (Apache Common IO) Data Serialization এবং Deserialization |
138
138

Apache Commons IO লাইব্রেরি মূলত ফাইল ম্যানিপুলেশন এবং স্ট্রিম ম্যানিপুলেশনের জন্য ডিজাইন করা হয়েছে। তবে, এর কিছু ইউটিলিটি ক্লাস ব্যবহার করে আপনি ডেটা সেরিয়ালাইজেশন (Data Serialization) এবং ডেসেরিয়ালাইজেশনও পরিচালনা করতে পারেন। Serialization হল একটি প্রক্রিয়া যার মাধ্যমে একটি অবজেক্টকে একটি বাইনারি ফর্ম্যাটে রূপান্তর করা হয়, যাতে তা স্টোর করা যায় বা নেটওয়ার্কের মাধ্যমে প্রেরণ করা যায়। একে ডেসিরিয়ালাইজেশন বলে উল্টোভাবে অবজেক্টে রূপান্তর করা হয়।

এখানে আমরা দেখব কীভাবে Apache Commons IO লাইব্রেরি ব্যবহার করে ফাইল বা স্ট্রিমে ডেটা সেরিয়ালাইজ এবং ডেসেরিয়ালাইজ করা যায়।


1. Java Serialization এবং Deserialization

Java এর স্ট্যান্ডার্ড Serialization প্রক্রিয়ায় একটি অবজেক্টকে একটি byte stream এ রূপান্তর করা হয়, যা পরে একটি ফাইলে বা স্ট্রিমে সংরক্ষিত হতে পারে। এটি পরে পুনরায় অবজেক্টে রূপান্তর (ডেসেরিয়ালাইজেশন) করা যায়।

Data Serialization using Apache Commons IO

আপনি ObjectOutputStream এবং ObjectInputStream ব্যবহার করে অবজেক্ট সেরিয়ালাইজ এবং ডেসেরিয়ালাইজ করতে পারেন। তবে Apache Commons IO লাইব্রেরি স্ট্রিম ম্যানিপুলেশন এবং সেরিয়ালাইজেশনের জন্য কিছু অতিরিক্ত ইউটিলিটি সরবরাহ করে, যা সহজে অবজেক্ট কপি করতে সহায়তা করে।


2. Data Serialization উদাহরণ

ধরা যাক, আমরা একটি ক্লাস Person সেরিয়ালাইজ করতে চাই এবং এটি একটি ফাইলে সংরক্ষণ করব।

Step 1: Person ক্লাস তৈরি করা

import java.io.Serializable;

public class Person implements Serializable {
    private static final long serialVersionUID = 1L; // সিরিয়ালাইজেশন ভার্সন আইডি
    private String name;
    private int age;

    // কনস্ট্রাক্টর
    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

    // গেটার এবং সেটার
    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    @Override
    public String toString() {
        return "Person [name=" + name + ", age=" + age + "]";
    }
}

Step 2: Person অবজেক্ট সেরিয়ালাইজ করা (FileOutputStream এবং ObjectOutputStream)

import org.apache.commons.io.FileUtils;
import java.io.*;

public class SerializeExample {
    public static void main(String[] args) {
        Person person = new Person("John Doe", 30);

        try (ObjectOutputStream objectOut = new ObjectOutputStream(new FileOutputStream("person.ser"))) {
            // Person অবজেক্ট সেরিয়ালাইজ করা
            objectOut.writeObject(person);
            System.out.println("Person অবজেক্ট ফাইলে সেরিয়ালাইজ করা হয়েছে।");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

ব্যাখ্যা:

  • ObjectOutputStream: এই ক্লাসটি অবজেক্টকে সেরিয়ালাইজ করে ফাইলে বা স্ট্রিমে লেখার জন্য ব্যবহৃত হয়।
  • person.ser: এটি ফাইল যা অবজেক্টটি সেরিয়ালাইজ করার পরে সংরক্ষিত হবে।

Output:

Person অবজেক্ট ফাইলে সেরিয়ালাইজ করা হয়েছে।

3. Data Deserialization উদাহরণ

ফাইল থেকে সেরিয়ালাইজ করা অবজেক্ট পুনরায় ডেসেরিয়ালাইজ করা যেতে পারে। এটি ObjectInputStream ব্যবহার করে করা হয়।

File থেকে অবজেক্ট ডেসেরিয়ালাইজ করা

import java.io.*;

public class DeserializeExample {
    public static void main(String[] args) {
        try (ObjectInputStream objectIn = new ObjectInputStream(new FileInputStream("person.ser"))) {
            // ফাইল থেকে অবজেক্ট ডেসেরিয়ালাইজ করা
            Person person = (Person) objectIn.readObject();
            System.out.println("ডেসেরিয়ালাইজ করা অবজেক্ট: " + person);
        } catch (IOException | ClassNotFoundException e) {
            e.printStackTrace();
        }
    }
}

ব্যাখ্যা:

  • ObjectInputStream: এটি ফাইল বা স্ট্রিম থেকে সেরিয়ালাইজড অবজেক্ট ডেসেরিয়ালাইজ করতে ব্যবহৃত হয়।
  • person.ser: এখানে আমরা পূর্বে সেরিয়ালাইজ করা person.ser ফাইলটি ডেসেরিয়ালাইজ করছি।

Output:

ডেসেরিয়ালাইজ করা অবজেক্ট: Person [name=John Doe, age=30]

4. Apache Commons IO: FileUtils.copyFile() এবং Serialization

Apache Commons IO এর FileUtils.copyFile() মেথডটি সেরিয়ালাইজড ফাইল কপি করার জন্য ব্যবহার করা যেতে পারে, যদি আপনি একটি ফাইলের মধ্যে সেরিয়ালাইজড অবজেক্ট রাখতে চান এবং সেই ফাইলটিকে অন্য জায়গায় কপি করতে চান।

Serialized File Copy Example

import org.apache.commons.io.FileUtils;
import java.io.File;
import java.io.IOException;

public class FileCopySerializationExample {
    public static void main(String[] args) {
        File sourceFile = new File("person.ser");
        File destinationFile = new File("person_copy.ser");

        try {
            // সেরিয়ালাইজড ফাইল কপি করা
            FileUtils.copyFile(sourceFile, destinationFile);
            System.out.println("ফাইল কপি করা হয়েছে: " + destinationFile.getName());
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

ব্যাখ্যা:

  • FileUtils.copyFile(): এটি একটি ফাইল থেকে অন্য ফাইলে ডেটা কপি করে, যেমন সেরিয়ালাইজড অবজেক্ট কপি করা।

Output:

ফাইল কপি করা হয়েছে: person_copy.ser

5. Buffered Stream ব্যবহার করে সেরিয়ালাইজেশন

বড় অবজেক্টের ক্ষেত্রে, আপনি BufferedInputStream এবং BufferedOutputStream ব্যবহার করে আরও কার্যকরভাবে সেরিয়ালাইজ এবং ডেসেরিয়ালাইজ করতে পারেন। এটি স্ট্রিমের পারফরম্যান্স উন্নত করে।

Buffered Stream ব্যবহার করা

import java.io.*;

public class BufferedStreamSerializationExample {
    public static void main(String[] args) {
        Person person = new Person("Alice", 25);

        try (BufferedOutputStream bufferedOut = new BufferedOutputStream(new FileOutputStream("personBuffered.ser"));
             ObjectOutputStream objectOut = new ObjectOutputStream(bufferedOut)) {

            // সেরিয়ালাইজড অবজেক্ট লেখার জন্য BufferedOutputStream ব্যবহার করা
            objectOut.writeObject(person);
            System.out.println("Buffered Stream দিয়ে সেরিয়ালাইজ করা হয়েছে!");

        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

ব্যাখ্যা:

  • BufferedOutputStream এবং ObjectOutputStream একসাথে ব্যবহার করা হয়েছে ফাইল লেখার পারফরম্যান্স বৃদ্ধি করার জন্য।

Output:

Buffered Stream দিয়ে সেরিয়ালাইজ করা হয়েছে!

Apache Commons IO লাইব্রেরি serialization এবং deserialization এর জন্য অত্যন্ত কার্যকরী সরঞ্জাম সরবরাহ করে। আপনি ObjectOutputStream এবং ObjectInputStream এর মাধ্যমে Java অবজেক্ট সেরিয়ালাইজ এবং ডেসেরিয়ালাইজ করতে পারেন, আর Apache Commons IO এর FileUtils ক্লাস ব্যবহার করে আপনি সেরিয়ালাইজড ফাইলের কপি এবং মুভমেন্ট করতে পারেন। ফাইল এবং স্ট্রিমের কার্যকর ব্যবস্থাপনা এবং পারফরম্যান্স অপটিমাইজেশনের জন্য Buffered Streams ব্যবহার করা যেতে পারে। Apache Commons IO লাইব্রেরি ডেটা সেরিয়ালাইজেশনকে দ্রুত এবং সহজ করে তোলে।

common.content_added_by
টপ রেটেড অ্যাপ

স্যাট অ্যাকাডেমী অ্যাপ

আমাদের অল-ইন-ওয়ান মোবাইল অ্যাপের মাধ্যমে সীমাহীন শেখার সুযোগ উপভোগ করুন।

ভিডিও
লাইভ ক্লাস
এক্সাম
ডাউনলোড করুন
Promotion